package cn.com.huzo.repository.tech;

import cn.com.huzo.model.entities.tech.MrpHeaderEntity;
import huzofw.repository.GenericRepository;
import java.util.List;
import java.util.Map;

/**
 * 物料需求计划数据访问对象接口。
 *
 * @author 吴旭
 */
public interface MrpHeaderRepository extends GenericRepository<MrpHeaderEntity, Long> {

    /**
     * 取得物料标识数据（包括审核权限标记）
     *
     * @param headerId 物料需求计划标识
     * @param currentUserId 当前用户
     * @param workFlowId 物料需求计划审核工作流标识
     * @return 当前物料需求单
     */
    MrpHeaderEntity fetchByKey(Long headerId, Long currentUserId, Long workFlowId);

    /**
     * 取得符合条件的调达表数据
     *
     * @param criterion 条件
     * @return
     */
    List<MrpHeaderEntity> fetchAll(Map<String, Object> criterion);

    /**
     * 根据款号取得提前组料信息
     *
     * @param styleNo 款号
     * @param moHeaderId 用于调达的生产指示书ID
     * @return 提前组料单
     */
    MrpHeaderEntity fetchPriorMrpByStyleNo(String styleNo, Long moHeaderId);

    /**
     * 根据款号取得定版调达信息
     *
     * @param styleNo 款号
     * @param moHeaderId 用于调达的生产指示书ID
     * @return 定版调达
     */
    MrpHeaderEntity fetchFinalMrpByStyleNo(String styleNo, Long moHeaderId);

    /**
     * 更新最后的操作日期，为了排序需要
     *
     * @param headerId 物料需求计划标识
     * @return
     */
    Integer updateLastTime(Long headerId);

    /**
     * 审核物料需求计划
     *
     * @param headerId 物料需求计划标识
     * @param workFlowId 审核流程标识
     * @param nodeOrder 审核流程步骤
     * @param checkedBy 审核人
     * @param isCheckCurrentNode 是否针对当前流程做审核
     * @return
     */
    Integer doCheck(Long headerId, Long workFlowId, Short nodeOrder, Long checkedBy, Short isCheckCurrentNode);

    /**
     * 反审物料需求计划
     *
     * @param headerId 物料需求计划标识
     * @param nodeOrder 审核流程步骤
     * @param checkedBy 审核人
     * @return
     */
    Integer doUnCheck(Long headerId, Short nodeOrder, Long checkedBy);

    /**
     * 设置采购完成标记
     *
     * @param headerId 物料需求计划标识
     * @param poOverFlag 完成标记
     * @return 影响行数
     */
    Integer setPoOverFlag(Long headerId, Boolean poOverFlag);
}
